package com.woan.api.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import org.apache.log4j.Logger;

/**
 * 
 * <p>
 * Title: fhs.common.func.FuncDate
 * </p>
 * <p>
 * Description: 一些常用的DATE类型的函数
 * </p>
 * <p>
 * Company: smart unicorn
 * </p>
 * 
 * @author hero
 * @version V 0.0.1
 */

public class FuncDate {
	static Logger log = Logger.getLogger(FuncDate.class.getName());
	private Calendar myCalendar;
	private Calendar today;
	private static Calendar serverTime;

	/**
	 * 构造函数, 获取了系统的当前时间。
	 * 
	 * @see <br>
	 *      author hero
	 */
	public FuncDate() {
		myCalendar = Calendar.getInstance();

		// ==today 改成从数据库获取时间
		// String s_today =
		// FuncDate.simpleFormatDate(FuncDate.getSystemDateTime(),
		// "-");
		// today = new GregorianCalendar();
		// today = FuncDate.getCalendar(s_today);
	}

	// 获取了服务器的当前时间。
	public static java.util.Date getServerDate() {
		serverTime = Calendar.getInstance();
		serverTime.setTime(new java.util.Date());
		return serverTime.getTime();
	}

	/**
	 * 将 STRING 格式的日期转换成 Calendar ，
	 * 
	 * @param date
	 *            ： STRING 格式的日期，格式要求为 YYYY-MM-DD
	 * @return Calendar ：
	 * @see <br>
	 *      author hero
	 */

	public static Calendar getCalendar(String date) {
		int y = Integer.parseInt(getYearOfDate(date), 10);
		int m = Integer.parseInt(getMonthOfDate(date), 10);
		int d = Integer.parseInt(getDayOfDate(date), 10);
		return new GregorianCalendar(y, m - 1, d);
	}

	/**
	 * 获得 DATE 是星期几，显示的是中文的星期，已经转换成了中国的习惯，和国际惯例差不一样 ；
	 * 
	 * @param date
	 *            ： STRING 格式的日期，格式要求为 YYYY-MM-DD
	 * @return int ： 符合中国习惯的星期
	 * @see <br>
	 *      author hero
	 */

	public int getWeekOfDate(String date) {
		Calendar c = getCalendar(date);
		int i = c.get(Calendar.DAY_OF_WEEK);
		if (i == 1) {
			i = 8;
		}
		return (i - 1);
	}

	/**
	 * 获得 DATE 是星期几，显示的是中文的星期，已经转换成了中国的习惯，和国际惯例差不一样 ；
	 * 
	 * @param date
	 *            ： STRING 格式的日期，格式要求为 YYYY-MM-DD
	 * @return String
	 * @see <br>
	 *      author hero
	 */

	public String getCnWeekofDate(String date) {
		int i = getWeekOfDate(date);
		return getCnWeek(i);
	}

	/**
	 * 获得今天是星期几，显示的是中文的星期，已经转换成了中国的习惯，和国际惯例差不一样 ；
	 * 
	 * @return String :
	 * @see <br>
	 *      author hero
	 */

	public String getCnWeekofDay() {
		int i = getWeekOfDay();
		return getCnWeek(i);
	}

	/**
	 * 获得今天是星期几，已经转换成了中国的习惯，和国际惯例差不一样 ；
	 * 
	 * @return int :符合中国习惯的星期
	 * @see <br>
	 *      author hero
	 */

	public int getWeekOfDay() {
		int i = today.get(Calendar.DAY_OF_WEEK);
		if (i == 1) {
			i = 8;
		}
		return (i - 1);
	}

	/**
	 * 将数字的星期转成文字的星期几
	 * 
	 * @param i
	 *            ： 星期几
	 * @return String ：中文的星期表示
	 * @see <br>
	 *      author hero
	 */

	public static String getCnWeek(int i) {
		String s = "";
		if (i == 1) {
			s = "一";
		}
		if (i == 2) {
			s = "二";
		}
		if (i == 3) {
			s = "三";
		}
		if (i == 4) {
			s = "四";
		}
		if (i == 5) {
			s = "五";
		}
		if (i == 6) {
			s = "六";
		}
		if (i == 7) {
			s = "日";
		}
		return s;
	}

	/**
	 * 获得今天日期的年份
	 * 
	 * @return int :
	 * @see <br>
	 *      author hero
	 */

	public int getYearOfToday() {
		return today.get(Calendar.YEAR);
	}

	/**
	 * 获得今天日期的月份
	 * 
	 * @return int :
	 * @see <br>
	 *      author hero
	 */

	public int getMonthOfToday() {
		return today.get(Calendar.MONTH) + 1;
	}

	/**
	 * 获得今天日期的天
	 * 
	 * @return int :
	 * @see <br>
	 *      author hero
	 */

	public int getDayOfToday() {
		return today.get(Calendar.DATE);
	}

	/**
	 * 获得今天的日期
	 * 
	 * @param gap
	 *            : 日期的年，月，天之间的分隔符，一般为“-”或“/”，建议大家统一使用“-”
	 * @return String
	 * @see <br>
	 *      author hero
	 */

	public String getCurrDate(String gap) {
		return String.valueOf(this.getYearOfToday()) + gap
				+ String.valueOf(this.getMonthOfToday() + 100).substring(1)
				+ gap + String.valueOf(this.getDayOfToday() + 100).substring(1);
	}

	/**
	 * 获得今天的日期, 日期的年，月，天之间的分隔符，默认为“-”
	 * 
	 * @return String
	 * @see <br>
	 *      author hero
	 */

	public String getCurrDate() {
		return getCurrDate("-");
	}

	/**
	 * 获得对比今天日期的位移
	 * 
	 * @param offset
	 *            ： 位移的大小
	 * @param gap
	 *            ：日期的年，月，天之间的分隔符
	 * @return String
	 * @see <br>
	 *      author hero
	 */

	public String getCurrDateOffset(int offset, String gap) {
		today.add(Calendar.DATE, offset);
		String temp = getCurrDate(gap);
		today.add(Calendar.DATE, -offset);
		return temp;
	}

	/**
	 * 获得对比今天日期的位移，日期的年，月，天之间的分隔符，默认为“-”
	 * 
	 * @param offset
	 *            ：位移的大小
	 * @return String ：
	 * @see <br>
	 *      author hero
	 */

	public String getCurrDateOffset(int offset) {
		return getCurrDateOffset(offset, "-");
	}

	/**
	 * 获得传入的日期的年份
	 * 
	 * @param currDate
	 *            ： String 格式的日期，要求是 YYYY-MM-DD
	 * @return String：
	 * @see <br>
	 *      author hero
	 */

	public static String getYearOfDate(String currDate) {
		return currDate.substring(0, 4);
	}

	/**
	 * 获得传入的日期的月份
	 * 
	 * @param currDate
	 *            ： String 格式的日期，要求是 YYYY-MM-DD
	 * @return String：
	 * @see <br>
	 *      author hero
	 */

	public static String getMonthOfDate(String currDate) {
		return currDate.substring(5, 7);
	}

	/**
	 * 获得传入的日期的天
	 * 
	 * @param currDate
	 *            ： String 格式的日期，要求是 YYYY-MM-DD
	 * @return String：
	 * @see <br>
	 *      author hero
	 */

	public static String getDayOfDate(String currDate) {
		return currDate.substring(8, 10);
	}

	// =======================================================================

	/**
	 * 将 STRING 转成 DATE
	 * 
	 * @param s
	 *            ： STRING格式的日期，要求格式是 YYYY-MM-DD，
	 * @return java.sql.Date ： 如果出错，则返回NULL
	 * @see <br>
	 *      author hero
	 */

	public static java.sql.Date toDate(String s) {
		if (s == null || s.equals("")) {
			return null;
		}
		try {
			// ==保证有效性
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			sdf.setLenient(false);
			sdf.parse(s);
			return java.sql.Date.valueOf(s);
		} catch (Exception ex) {
			log.error(ex.toString());
			return null;
		}
	}
	/**
	 * 获取系统当前时间
	 * 返回为Strng 类型时间
	 * 格式：yyyy-MM-dd HH:mm:ss
	 */
	public static String FindCurSysTime1() {
		
		SimpleDateFormat   formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		 Date   curDate   =   new   Date(System.currentTimeMillis());
		 String   loginseq   =   formatter.format(curDate);  
		return loginseq;
	}
	/**
	 * 获取系统当前时间
	 * 返回为Strng 类型时间
	 * 格式：yyyyMMddhhmm
	 */
	public static String FindCurSysTime() {
		SimpleDateFormat   formatter = new SimpleDateFormat("yyyyMMddHHmmss");
		 Date   curDate   =   new   Date(System.currentTimeMillis());
		 String   loginseq   =   formatter.format(curDate);  

		return loginseq;
	}
	/**
	 * 将 STRING 转成 DATE TIME
	 * 
	 * @param s
	 *            ： STRING格式的日期，要求格式是 YYYY-MM-DD hh:mm:ss，
	 * @return java.sql.Date ： 如果出错，则返回NULL
	 * @see <br>
	 *      author hero
	 */

	public static java.sql.Date toDateTime(String s) {
		if (s == null || s.equals("")) {
			return null;
		}
		try {
			// ==保证有效性
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			sdf.setLenient(false);
			java.util.Date ud = sdf.parse(s);

			java.sql.Date sd = new java.sql.Date(1);
			sd.setTime(ud.getTime());
			return sd;
		} catch (Exception e) {
			log.error(e.toString());
			return null;
		}
	}

	/**
	 * 将 DATE 转成指定格式的 STRING
	 * 
	 * @param java
	 *            .util.Date ： 注：java.sql.Date , java.sql.Timestamp 是
	 *            java.util.Date 的子类
	 * @param pattern
	 *            ：要转换的格式(具体的格式，请参考java.text.SimpleDateFormat)，如果为NULL，默认
	 *            yyyy-MM-dd
	 * @return String ：如果转换出错，则返回NULL
	 * @see <br>
	 *      author hero
	 */

	public static String formatDate(java.util.Date date, String pattern) {
		if (date == null) {
			return null;
		}
		if (pattern == null) {
			pattern = "yyyy-MM-dd";
		}
		try {
			SimpleDateFormat sdf = new SimpleDateFormat(pattern);
			return sdf.format(date);
		} catch (Exception ex) {
			log.error(ex.toString());
			return null;
		}

	}

	/**
	 * 将 DATE 转成 "yyyy?mm?dd" 格式的 STRING
	 * 
	 * @param java
	 *            .util.Date ： 注：java.sql.Date , java.sql.Timestamp 是
	 *            java.util.Date 的子类
	 * @param gap
	 *            ：日期的年，月，天之间的分隔符, 如果为NULL，默认 "";
	 * @return String ：
	 * @see <br>
	 *      author hero
	 */

	public static String simpleFormatDate(java.util.Date date, String gap) {
		if (date == null) {
			return null;
		}
		if (gap == null) {
			gap = "";
		}
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy" + gap + "MM" + gap
				+ "dd");
		return sdf.format(date);
	}

	/**
	 * <pre>
	 * 将 STRING 的 Date 转换成另一个格式的 STRING，只做转换，不做校验
	 * @param date ： STRING 格式的 Date，格式要求为
	 *                yyyy?mm?dd  ： ? 为任意的分隔符
	 *                yyyymmdd
	 * @param gap : 日期的年，月，天之间的分隔符, 如果为NULL，默认 "";
	 * @return String : yyyy?mm?dd 格式的 STRING , 不符合格式要求，则返回 NULL ；
	 * </pre>
	 * 
	 * @see <br>
	 *      author hero
	 */

	public static String simpleFormatDate(String date, String gap) {
		if (date == null) {
			return null;
		}
		if (gap == null) {
			gap = "";
		}

		if (date.length() == 8) { // yyyymmdd
			String year = date.substring(0, 4);
			String month = date.substring(4, 6);
			String day = date.substring(6, 8);
			date = year + gap + month + gap + day;
		} else if (date.length() == 10) { // yyyy?mm?dd
			String year = date.substring(0, 4);
			String month = date.substring(5, 7);
			String day = date.substring(8, 10);
			date = year + gap + month + gap + day;
		} else {
			return null;
		}

		return date;
	}

	/**
	 * <pre>
	 * 将 STRING 的 Date 转换成另一个格式的 STRING，只做转换，不做校验
	 * @param date ： STRING 格式的 Date，格式要求为
	 *                dd?mm?yyyy?  ： ? 为任意的分隔符
	 * @param gap : 日期的年，月，天之间的分隔符, 如果为NULL，默认 "";
	 * @return String : yyyy?mm?dd 格式的 STRING , 不符合格式要求，则返回 NULL ；
	 * </pre>
	 * 
	 * @see <br>
	 *      author hero
	 */

	public static String simpleFormatDates(String date, String gap) {
		if (date == null) {
			return null;
		}
		if (gap == null) {
			gap = "";
		} else if (date.length() == 10) { // yyyy?mm?dd
			String day = date.substring(0, 2);
			String month = date.substring(3, 5);
			String year = date.substring(6, 10);
			date = year + gap + month + gap + day;
		} else {
			return null;
		}

		return date;
	}

	/**
	 * <pre>
	 * 将 STRING 的 Date 转换成: yyyy年mm月dd日，只做转换，不做校验
	 * @param date ： STRING 格式的 Date，格式要求为
	 *                yyyy?mm?dd  ： ? 为任意的分隔符
	 *                yyyymmdd
	 * @return String : yyyy年mm月dd日 格式的 STRING , 不符合格式要求，则返回 NULL ；
	 * </pre>
	 * 
	 * @see <br>
	 *      author hero
	 */

	public static String simpleFormatDate(String date) {
		if (date == null) {
			return null;
		}
		if (date.length() == 8) { // yyyymmdd
			String year = date.substring(0, 4);
			String month = date.substring(4, 6);
			String day = date.substring(6, 8);
			date = year + "年" + month + "月" + day + "日";
		} else if (date.length() == 10) { // yyyy?mm?dd
			String year = date.substring(0, 4);
			String month = date.substring(5, 7);
			String day = date.substring(8, 10);
			date = year + "年" + month + "月" + day + "日";
		} else {
			return null;
		}

		return date;
	}

	/**
	 * 将 Date Time 转成指定格式的 STRING
	 * 
	 * @param java
	 *            .util.Date ： 注：java.sql.Date , java.sql.Timestamp 是
	 *            java.util.Date 的子类
	 * @param pattern
	 *            ： 要转换的格式(具体的格式，请参考java.text.SimpleDateFormat)， 如果为NULL，默认
	 *            yyyy-MM-dd HH:mm:ss
	 * @return String ： 如果转换出错，则返回NULL
	 * @see <br>
	 *      author hero
	 */

	public static String formatDateTime(java.util.Date date, String pattern) {
		if (date == null) {
			return null;
		}
		if (pattern == null) {
			pattern = "yyyy-MM-dd HH:mm:ss";
		}
		try {
			SimpleDateFormat sdf = new SimpleDateFormat(pattern);
			return sdf.format(date);
		} catch (Exception ex) {
			log.error(ex.toString());
			return null;
		}
	}

	/**
	 * 将 Date Time 转成 "yyyy?mm?dd hh:mm:ss" 格式的 STRING
	 * 
	 * @param java
	 *            .util.Date ： 注：java.sql.Date , java.sql.Timestamp 是
	 *            java.util.Date 的子类
	 * @param gap
	 *            ：日期的年，月，天之间的分隔符,如果为NULL，默认 "";
	 * @return String ：
	 * @see <br>
	 *      author hero
	 */

	public static String simpleFormatDateTime(java.util.Date date, String gap) {
		if (date == null) {
			return null;
		}
		if (gap == null) {
			gap = "";
		}

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy" + gap + "MM" + gap
				+ "dd HH:mm:ss");
		return sdf.format(date);
	}

	/**
	 * <pre>
	 * 将 STRING 的 DateTime 转换成另一个格式的 STRING，只做转换，不做校验
	 * @param date ： STRING 格式的 DateTime，格式要求为
	 *                ? 为任意的分隔符
	 *                yyyy?mm?dd hh?mm?ss
	 *                yyyymmdd hhmmss
	 *                yyyymmddhhmmss
	 * @param gap : 日期的年，月，天之间的分隔符,如果为NULL，默认 "";
	 * @return String : yyyy?mm?dd hh:mm:ss 格式的 STRING , 不符合格式要求，则返回 NULL ；
	 * </pre>
	 * 
	 * @see <br>
	 *      author hero
	 */

	public static String simpleFormatDateTime(String date, String gap) {
		if (date == null) {
			return null;
		}
		if (gap == null) {
			gap = "";
		}

		if (date.length() == 14) { // yyyymmddhhmmss
			String year = date.substring(0, 4);
			String month = date.substring(4, 6);
			String day = date.substring(6, 8);
			String hour = date.substring(8, 10);
			String min = date.substring(10, 12);
			String second = date.substring(12, 14);
			date = year + gap + month + gap + day + " " + hour + ":" + min
					+ ":" + second;
		} else if (date.length() == 15) { // yyyymmdd hhmmss
			String year = date.substring(0, 4);
			String month = date.substring(4, 6);
			String day = date.substring(6, 8);
			String hour = date.substring(9, 11);
			String min = date.substring(11, 13);
			String second = date.substring(13, 15);
			date = year + gap + month + gap + day + " " + hour + ":" + min
					+ ":" + second;
		} else if (date.length() == 19) { // yyyy?mm?dd hh?mm?ss
			String year = date.substring(0, 4);
			String month = date.substring(5, 7);
			String day = date.substring(8, 10);
			String hour = date.substring(11, 13);
			String min = date.substring(14, 16);
			String second = date.substring(17, 19);
			date = year + gap + month + gap + day + " " + hour + ":" + min
					+ ":" + second;
		} else {
			return null;
		}

		return date;
	}

	/**
	 * 将 Date Time 转成 "yyyy?mm?dd hh:mm:ss" 格式的 STRING
	 * 
	 * @param java
	 *            .util.Date ： 注：java.sql.Date , java.sql.Timestamp 是
	 *            java.util.Date 的子类
	 * @param gap
	 *            ：日期的年，月，天之间的分隔符,如果为NULL，默认 "";
	 * @return String ：
	 * @see <br>
	 *      author hero
	 */

	public static String simpleFormatDateTime(java.util.Date date) {
		return FuncDate.simpleFormatDateTime(date, "-");
	}

	/**
	 * 将 Date Time 转成 "yyyy-mm-dd hh:mm:ss" 格式的 STRING
	 * 
	 * @param java
	 *            .util.Date ： 注：java.sql.Date , java.sql.Timestamp 是
	 *            java.util.Date 的子类
	 * @param gap
	 *            ：日期的年，月，天之间的分隔符,如果为NULL，默认 "";
	 * @return String ：
	 * @see <br>
	 *      author hero
	 */

	public static String simpleFormatDateTime(String date) {
		return FuncDate.simpleFormatDateTime(FuncDate.toDateTime(date));
	}

	/**
	 * 判断 STRING 格式的日期是否是一个合格的日期
	 * 
	 * @param date
	 *            ： STRING 格式的日期，格式要求为： yyyy-mm-dd
	 * @return boolean ： true 是合格的日期， false不是合格的日期
	 * @see <br>
	 *      author hero
	 */

	public static boolean isDate(String date) {
		if (date == null) {
			return false;
		}
		// ==日期的格式
		// ==yyyy?mm?dd ： ? 为任意的分隔符
		// ==yyyymmdd

		// ==如果不限定格式为 yyyy-mm-dd，可以把下面的注释去掉
		// date = simpleFormatDate(date, "-");

		// ==
		if (toDate(date) == null) {
			return false;
		} else {
			return true;
		}
	}
	

	/**
	 * 判断 STRING 格式的日期（包含时间）是否是一个合格的日期（包含时间）
	 * 
	 * @param s
	 *            ： STRING 格式的日期（包含时间），格式要求为: yyyy-mm-dd hh:mm:ss
	 * @return boolean ： true 是合格的日期， false不是合格的日期
	 * @see <br>
	 *      author hero
	 */

	public static boolean isDateTime(String date) {
		if (date == null) {
			return false;
		}
		// ==STRING 格式的日期（包含时间），格式要求为
		// == yyyy?mm?dd hh:mm:ss ? 为任意的分隔符
		// == yyyymmdd hhmmss
		// == yyyymmddhhmmss

		// ==如果不限定格式为 yyyy-mm-dd hh:mm:ss，可以把下面的注释去掉
		// date = simpleFormatDateTime(date, "-");

		if (toDateTime(date) == null) {
			return false;
		} else {
			return true;
		}
	}

	/**
	 * 获取系统当前时间，格式：yyyy-mm-dd hh24:mi:ss。
	 * 
	 * @param conn
	 * @return
	 * @see <br>
	 *      author hero
	 */
	public static String getSysDateTimeForString(Connection conn) {
		String datetime = null;

		ResultSet rs = null;
		PreparedStatement ps = null;
		try {
			String sql = "SELECT to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss') as sys_date FROM dual ";
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			if (rs.next()) {
				datetime = rs.getString(1);
			}
			rs.close();
		} catch (Exception e) {
			log.error(e.toString());
			datetime = null;
		} finally {
			try {
				if (rs != null) {
					rs.close();
					rs = null;
				}
				if (ps != null) {
					ps.close();
					ps = null;
				}

			} catch (Exception ex) {
				log.error(ex.toString());
			}

		}

		return datetime;

	}

	/**
	 * 将 java.sql.Timestamp 转成 DATE TIME
	 * 
	 * @param timestamp
	 *            ： java.sql.Timestamp 格式的日期
	 * @return java.sql.Date ： 如果java.sql.Timestamp = null，则返回NULL
	 * @see <br>
	 *      author hero
	 */

	public static java.sql.Date toDateTime(java.sql.Timestamp timestamp) {
		if (timestamp == null) {
			return null;
		}
		return new java.sql.Date(timestamp.getTime());
	}

	/**
	 * 将 java.sql.Date 转成 Timestamp
	 * 
	 * @param java
	 *            .util.Date ： java.util.Date
	 * @return java.sql.Timestamp ： 如果java.util.Date = null，则返回NULL
	 * @see <br>
	 *      author hero
	 */

	public static java.sql.Timestamp toTimestamp(java.util.Date datetime) {
		if (datetime == null) {
			return null;
		}
		return new java.sql.Timestamp(datetime.getTime());
	}

	/**
	 * 获得两个时间之间的差值。
	 * 
	 * @param begin_time
	 *            ：开始时间，格式为 ####，比如，12：30，要写成 1200
	 * @param end_time
	 *            ：结束时间，格式为 ####，比如，12：30，要写成 1200
	 * @return
	 * @see <br>
	 *      author hero
	 */

	public static String getTimeLen(String begin_time, String end_time) {
		if (begin_time == null || begin_time.equals("") || end_time == null
				|| end_time.equals("")) {
			return "0";
		}
		int tmpBegin = 0;
		int tmpEnd = 0;
		tmpBegin = Integer.parseInt(begin_time);
		tmpEnd = Integer.parseInt(end_time);
		if (tmpEnd <= tmpBegin) {
			tmpEnd = tmpEnd + 2400;
		}
		return String.valueOf((tmpEnd / 100 - tmpBegin / 100) * 60
				+ (tmpEnd % 100 - tmpBegin % 100));

	}

	/**
	 * 将 当前时间减一个月
	 * 
	 * @param java
	 *            .util.Date ： 注：java.sql.Date , java.sql.Timestamp 是
	 *            java.util.Date 的子类
	 * @param gap
	 *            ：日期的年，月，天之间的分隔符, 如果为NULL，默认 "";
	 * @return String ：
	 * @see <br>
	 *      author hero
	 */

	public String getPreMonthDate(String date) {
		String preMonthDate = null;
		String gap = "-";
		int yy = Integer.parseInt(getYearOfDate(date), 10);
		int mm = Integer.parseInt(getMonthOfDate(date), 10);
		int dd = Integer.parseInt(getDayOfDate(date), 10);
		if (mm == 1) {
			yy = yy - 1;
			mm = 12;
		} else {
			mm = mm - 1;
		}
		preMonthDate = String.valueOf(yy) + gap
				+ String.valueOf(mm + 100).substring(1) + gap
				+ String.valueOf(dd + 100).substring(1);
		return preMonthDate;

	}

	/**
	 * 获取两个日期间相差的月份数
	 * 
	 * @param start_date
	 *            起始时间 ，要求起始时间小于终止时间，否则返回0
	 * @param end_date
	 *            终止时间
	 * @return
	 * @see <br>
	 *      author hero
	 */
	public static int getBetweenMonth(java.sql.Date start_date,
			java.sql.Date end_date) {

		int betCount = 0;
		String s_start_date = null;
		s_start_date = FuncDate.simpleFormatDate(start_date, "-");
		s_start_date = s_start_date.substring(0, 8) + "01";
		start_date = FuncDate.toDate(s_start_date);
		log.info(start_date);
		log.info(end_date);
		for (; !start_date.equals(end_date);) {
			start_date.setMonth(start_date.getMonth() + 1);
			log.info(start_date);
			if (start_date.getYear() <= end_date.getYear()) {
				if (start_date.getYear() < end_date.getYear()) {
					betCount = betCount + 1;
				} else if (start_date.getMonth() <= end_date.getMonth()) {
					betCount = betCount + 1;
				}
			} else {
				return betCount;
			}

		}

		return betCount;

	}

	/**
	 * 获取从起始时间到其实月份最后一天的天数
	 * 
	 * @param start_date
	 *            起始时间
	 * @return
	 * @see <br>
	 *      author hero
	 */

	public static int getDayToLastDay(java.sql.Date start_date) {
		int count = 0;
		int month = start_date.getMonth() + 1;
		for (; start_date.getMonth() + 1 == month;) {
			start_date.setDate(start_date.getDate() + 1);
			count = count + 1;
		}

		return count;
	}

	/**
	 * 将 STRING 转成 DATE TIME
	 * 
	 * @param s
	 *            ： STRING格式的日期，要求格式是 YYYY-MM-DD hh:mm:ss，
	 * @return java.sql.Date ： 如果出错，则返回NULL
	 * @see <br>
	 *      author hero
	 */

	public static java.sql.Timestamp toDateTimestamp(String s) {
		if (s == null || s.equals("")) {
			return null;
		}
		try {
			// ==保证有效性
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			sdf.setLenient(false);
			java.sql.Timestamp ud = (java.sql.Timestamp) sdf.parse(s);
			return ud;
			// java.sql.Timestamp sd = new java.sql.Timestamp(1);
			// sd.setTime(ud.getTime());
			// return sd;
		} catch (Exception e) {
			log.error(e.toString());
			return null;
		}
	}

	/**
	 * 将 STRING 转成 Calendar
	 * 
	 * @param s
	 *            ： STRING格式的日期，要求格式是 YYYY-MM-DD，
	 * @return Calendar ：
	 * @see <br>
	 *      author hero
	 */
	public static Calendar getDayDate(String date) {
		int year = Integer.parseInt(date.substring(0, 4));
		int month = Integer.parseInt(date.substring(5, 7));
		int day = Integer.parseInt(date.substring(8, 10));
		// System.out.println(year+"年=="+month+"月=="+day+"日");
		Calendar c = Calendar.getInstance();
		c.set(year, month - 1, day);
		return c;

	}

	/**
	 * 获取当前系统时间，精确到时分秒
	 * 
	 * @return
	 */
	public static Timestamp getSysTime() {
		return new Timestamp(new java.util.Date().getTime());
	}

	/**
	 * 计算两个时间的相差值
	 * 
	 * @param before
	 *            :之前的时间
	 * @param after
	 *            ：之后的时间
	 * @return :返回单位：秒
	 */
	public static long getSubTime(java.util.Date before, java.util.Date after) {
		long subTime = after.getTime() - before.getTime();
		return subTime / 1000;
	}

	public static void main(String arg[]) {

	}
}